assume cs:codesg

data segment
; 年份 21个字符串
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'
db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'

; 总收入21个dword
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000

; 雇员人数
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542, 14430, 15257, 17800
data ends

table segment
db 21 dup ('year summ ne ?? ')
table ends

stack segment
db 16 dup(0)
stack ends

; 设计思路
; 将年份，总输入，雇员人数堪称是三个数组a, b, c，数组的基地址存放到栈中，栈里面存储顺序 a, b ,c, cx
; table 看成是结构体，bx存放基准地址，idata存放集体的结构，si作为便宜量

codesg segment
start:
    ; 初始化栈、数据段、bx指向table
    mov ax, stack
    mov ss, ax
    mov sp, 10h
    mov ax, data
    mov ds, ax
    mov ax, table
    mov es, ax
    mov bx, 0H

    ; 数组基地址，放入栈中，di保存 雇员人数栈地址
    mov ax, 0
    push ax     ;年份
    mov ax, 84
    push ax    ;总收入
    mov ax, 168
    push ax   ;雇员人数
    mov di, sp
    mov cx, 21

s0:
    push cx

    mov bp, ss:[di+4]      ;取出年份基地址
    ; 填充年份
    mov cx, 4
    mov si, 0
s1:
    mov al, ds:[bp][si]
    mov byte ptr es:[bx].0H[si], al
    inc si
    loop s1

    add word ptr ss:[di+4], 4     ;年份基准地址+4
    
    ; 填充4H为空格
    mov al, ' '
    mov es:[bx].4H, al

    mov bp, ss:[di + 2]    ;总收入基地址
    ; 填充5H收入
    mov ax, ds:[bp]
    mov es:[bx].5H, ax
    mov ax, ds:[bp + 2]
    mov es:[bx].7H, ax
    add word ptr ss:[di + 2], 4     ;总收入基地址+4

    ; 填充9H为空格
    mov al, ' '
    mov es:[bx].9H, al

    mov bp, ss:[di];   ;雇员人数基地址
    ; AH雇员人数
    mov ax, ds:[bp]
    mov es:[bx].0AH, ax
    add word ptr ss:[di], 2       ;雇员人数基地址+2

    ; 填充CH为空格
    mov al, ' '
    mov es:[bx].0CH, al

    ; 计算平均收入
    mov dx, es:[bx].7H
    mov ax, es:[bx].5H
    div word ptr es:[bx].0AH
    ; 16位div，商在ax,余数在dx中
    mov es:[bx].0DH, ax

    ; 填充FH为空格
    mov al, ' '
    mov es:[bx].0FH, al

    add bx, 10H         ;设置下一行数据
    pop cx
    loop s0

    pop ax  ; 将数组基地址弹出
    pop ax
    pop ax

    mov ax, 4c00H
    int 21H
codesg ends

end start